home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / environ / findenv.c < prev    next >
C/C++ Source or Header  |  1988-01-01  |  2KB  |  61 lines

  1.  
  2.  
  3. /* 
  4.      program:    findenv.c
  5.      author:        Rick Roberts
  6.      date:        16Dec87
  7.  
  8.       findenv uses getenv2 to find the system environment location and
  9.     size.  It goes to the segment returned by getenv2 and searches for the
  10.     string COMSPEC=.  If findenv locates the string it prints the 
  11.     environment's address and size.
  12.     Compiled with Microsoft C ver 4.0.
  13.     use msc findenv /AL;  masm getenv2;  link findenv getenv2;
  14. */  
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <dos.h>
  20.  
  21.  
  22. extern unsigned int far getenv2();    /* getenv2.asm finds the environment */
  23. int envseg;             /* will contain the environment segment */
  24. char far *env;          /* far pointer to the system environment */
  25. char far *tem;          /* temporary pointer for searching */
  26. int enl;                /* will be set to size of environment */
  27. char *search_for();     /* routine to search environment for string */
  28.  
  29. main()
  30. {
  31.     static char comspec[]="COMSPEC=";
  32.     enl=getenv2(&envseg);    /*get length and address of system environment*/
  33.     FP_SEG(env)=envseg;        /* set far pointer's segment */
  34.     FP_OFF(env)=0;            /* set far pointer's offset */
  35.     if(search_for(comspec) != NULL)        /*see if we can find COMSPEC */
  36.     {
  37.         printf("  The environment size is %d",enl);
  38.         printf(" and its address is %x:0000\n",envseg);
  39.         exit(0);
  40.     }
  41.     printf(" Could not locate COMSPEC variable");
  42. }
  43.  
  44. char *search_for(str)    /*searches environment for string*/
  45. char *str;        /* string to search for */    
  46. {
  47.     int    l;    /*scratch string length*/
  48.     l=strlen(str);    /*calculate length of argument string*/
  49.     tem=env;
  50. /*    &tem    the address where tem is stored - remains constant */
  51. /*    *tem    first letter of each environment variable*/
  52. /*    tem     offset of first letter of each environment variable*/
  53.     while(*tem!=0)    /*loop for all strings in environment*/
  54.     {
  55.     if (strnicmp(tem,str,l)==0)    /*if you find it,*/
  56.         return(tem);        /* return a pointer to it*/
  57.     while(*tem++ != 0);        /*else, skip to next string*/
  58.     }
  59.     return(NULL);        /*if no such string, return NULL*/
  60. }
  61.